package com.leigq.basaltools.util;

import com.leigq.basaltools.constant.RegexConstants;
import com.leigq.basaltools.enumeration.GlobalEnums;

import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 * <br/>
 * <a href='https://c.runoob.com/front-end/854'>正则表达式在线测试</a>
 * <p>
 *
 * @author ：leigq <br>
 * </p>
 */
public abstract class RegexUtils {

    /**
     * 通用验证方法，已对正则做预编译处理，推荐使用
     * <br/>
     *
     * @param pattern 使用 {@link RegexConstants} 类中定义的 pattern，或者使用 {@link RegexUtils#getPattern(String)} 获取
     * @param input   需要验证的字符串
     * @return 验证成功 true, 失败 false
     */
    public static boolean validate(Pattern pattern, String input) {
        return pattern.matcher(input).matches();
    }


    /**
     * 通用验证方法，已对正则做预编译处理，推荐使用
     * <br/>
     *
     * @param regex 正在表达式
     * @param input 需要验证的字符串
     * @return 验证成功 true, 失败 false
     */
    public static boolean validate(String regex, String input) {
        return validate(getPattern(regex), input);
    }


    /**
     * 通用验证方法，未对正则做预编译处理，不推荐使用
     *
     * @param regexEnum 使用 GlobalEnums.Regex 中定义的正则
     * @param input     需要验证的字符串
     * @return 验证成功 true, 失败 false
     * @deprecated 推荐使用 {@link RegexUtils#validate(Pattern, String)}
     */
    @Deprecated
    public static boolean validate(GlobalEnums.Regex regexEnum, String input) {
        return Pattern.matches(regexEnum.toString(), input);
    }

    /**
     * Gets pattern.
     *
     * @param regexEnum 使用 GlobalEnums.Regex 中定义的正则
     * @return the pattern
     */
    public static Pattern getPattern(GlobalEnums.Regex regexEnum) {
        return Pattern.compile(regexEnum.toString());
    }


    /**
     * Gets pattern.
     *
     * @param regex 正在表达式
     * @return the pattern
     */
    public static Pattern getPattern(String regex) {
        return Pattern.compile(regex);
    }

}
